#include <string.h>
#include <malloc.h>
#include <stdio.h>

char *removeDuplicateLetters(char *s) {
    int vis[26], num[26];
    memset(vis, 0, sizeof(vis));
    memset(num, 0, sizeof(num));
    int n = strlen(s);
    for (int i = 0; i < n; ++i) {
        num[s[i] - 'a']++;
    }
    char *stk = malloc(sizeof(char) * 27);
    int stkTop = 0;
//    for (int i = 0; i < n; ++i) {
//        printf("%d \n ", vis[s[i] - 'a']);
//        if (!vis[s[i] - 'a']) {
//            while (stkTop > 0 && stk[stkTop - 1] > s[i]) {
//                if (num[stk[stkTop - 1] - 'a'] > 0) {
//                    vis[stk[--stkTop] - 'a'] = 0;
//                } else {
//                    break;
//                }
//            }
//            vis[s[i] - 'a'] = 1;
//            stk[stkTop++] = s[i];
//        }
//        num[s[i] - 'a'] -= 1;
//    }
    for (int i = 0; i < n; ++i) {
        if (!vis[s[i] - 'a']) {
            while (stkTop > 0 && stk[stkTop - 1] > s[i]) {
                printf("%d\n", stkTop);
                if (num[stk[stkTop - 1] - 'a'] > 0) {
                    vis[stk[--stkTop] - 'a'] = 0;
                } else {
                    break;
                }
            }
            vis[s[i] - 'a'] = 100;
            stk[stkTop++] = s[i];
        }
        num[s[i] - 'a'] -= 1;
    }
    stk[stkTop] = '\0';
    return stk;
}

int main() {
    char test[10] = "bcabc";
    char *ret = removeDuplicateLetters(test);
    printf(" %s", ret);
}
